<html>
	<head>
		<meta charset="utf-8"></meta>
		<title>BSource</title>
		<link href="./style.css" rel="stylesheet" type="text/css"/>
	</head>
	<body>
		<div class="class" name="BSource">
			<h1>BSource</h1>
			<p>继承自<a href="BObject.html">BObject</a></p>
			<p id="resume">BSource是脚本源码类，包含用于脚本编译的源码文本，且可对自身源码进行语法解析。<a href="#desc">详细</a></p>
			<h2>public</h2>
			<table id="public">
				<tr><td align="right"/><td><a href="#BSource(BScript*)">BSource</a>(BScript* script = 0);</td></tr>
				<tr><td align="right"/><td><a href="#BSource(const BString&,BScript*)">BSource</a>(const BString& name, BScript* script = 0);</td></tr>
				<tr><td align="right"/><td><a href="#~BSource()">~BSource</a>();</td></tr>
				<tr><td align="right">virtual void </td><td><a href="#copy(const BSource*)">copy</a>(const BSource* other);</td></tr>
				<tr><td align="right">virtual BSource* </td><td><a href="#clone() const">clone</a>() const;</td></tr>
				<tr><td align="right">bool </td><td><a href="#load(const BString&)">load</a>(const BString& fileName);</td></tr>
				<tr><td align="right">bool </td><td><a href="#save(const BString&)">save</a>(const BString& fileName);</td></tr>
				<tr><td align="right">bool </td><td><a href="#setFileName(const BString&)">setFileName</a>(const BString& fileName);</td></tr>
				<tr><td align="right">const BString&amp; </td><td><a href="#fileName() const">fileName</a>() const;</td></tr>
				<tr><td align="right">bool </td><td><a href="#setText(const BString&)">setText</a>(const BString& text);</td></tr>
				<tr><td align="right">const BString&amp; </td><td><a href="#text() const">text</a>() const;</td></tr>
				<tr><td align="right">bool </td><td><a href="#analyse()">analyse</a>();</td></tr>
				<tr><td align="right">const BExpHolderArray&amp; </td><td><a href="#document() const">document</a>() const;</td></tr>
				<tr><td align="right">void </td><td><a href="#clean()">clean</a>();</td></tr>
				<tr><td align="right">const BClass* </td><td><a href="#findClass(const BString&)">findClass</a>(const BString& type);</td></tr>
				<tr><td align="right">BScript* </td><td><a href="#script()">script</a>();</td></tr>
				<tr><td align="right">const BScript* </td><td><a href="#script() const">script</a>() const;</td></tr>
			</table>
			<div id="desc">
				<h2>详细介绍：</h2>
				<p>BSource是脚本源码类，包含用于脚本编译的源码文本，且可对自身源码进行语法解析。可使用其analyse()方法对其进行解析，解析后其会保留解析结果，使用document()方法取得，可对其语义进行分析，常用于语法高亮。BScript中包含多个BSource对象，在编译时首先会调用源码对象的analyse()方法，但编译完成时会清除各个源码解析产生的临时数据。<p>需要指出的是源码解析只是编译过程的第一步，之后进行合并combine，然后进行指令序列化serialize，最后进行链接clink()。</p></p>
			</div>
			<h2 id="docs">成员文档：</h2>
			<div id="BSource(BScript*)">
				<h3>BSource(BScript* script = 0);</h3>
				<p>初始化源码对象，参数指定的脚本会把此源码加入脚本中。</p>
			</div>
			<div id="BSource(const BString&,BScript*)">
				<h3>BSource(const BString&amp; name, BScript* script = 0);</h3>
				<p>初始化源码对象，name参数设置源码名称，此名称会在编译中用于文件包含查找。script参数指定此源码对象加入的脚本。</p>
			</div>
			<div id="~BSource()">
				<h3>~BSource();</h3><p>析构一个源码对象。</p>
			</div>
			<div id="copy(const BSource*)">
				<h3>virtual void copy(const BSource* other);</h3>
				<p>拷贝别的源码对象，拷贝内容只包括名称、文本、文件名。</p>
			</div>
			<div id="clone() const">
				<h3>virtual BSource* clone() const;</h3>
				<p>创建一个源码对象，从此源码对象拷贝数据。</p>
			</div>
			<div id="load(const BString&)">
				<h3>bool load(const BString&amp; fileName);</h3>
				<p>加载一个文件，此文件应当为源码文件，文件名也会置为此文件名。</p>
			</div>
			<div id="save(const BString&)">
				<h3>bool save(const BString&amp; fileName);</h3>
				<p>将源码文本保存为指定文件，文件名也会置为此文件名。</p>
			</div>
			<div id="setFileName(const BString&)">
				<h3>bool setFileName(const BString&amp; fileName);</h3>
				<p>修改此源码对象的文件名。文件名的路径会是头文件包含时的当前路径。</p>
			</div>
			<div id="fileName() const">
				<h3>const BString&amp; fileName() const;</h3>
				<p>获得源码对象的文件名。</p>
			</div>
			<div id="setText(const BString&)">
				<h3>bool setText(const BString&amp; text);</h3>
				<p>设置源码文本。</p>
			</div>
			<div id="text() const">
				<h3>const BString&amp; text() const;</h3>
				<p>取得源码文本。</p>
			</div>
			<div id="analyse()">
				<h3>bool analyse();</h3>
				<p>执行代码的语法解析，成功返回true，失败返回false。解析完成后可调用document()方法取得语义元素。</p>
			</div>
			<div id="document() const">
				<h3>const BExpHolderArray&amp; document() const;</h3>
				<p>取得语义元素，可用于语法分析，以及配合BTextFormat进行语法高亮的设计。</p>
			</div>
			<div id="clean()">
				<h3>void clean();</h3>
				<p>清理解析过程中产生的临时语义数据，不改变源码文本。</p>
			</div>
			<div id="findClass(const BString&)">
				<h3>const BClass* findClass(const BString&amp; type);</h3>
			</div>
			<div id="script()">
				<h3>BScript* script();</h3>
				<p>获取此源码对象所在的脚本对象。</p>
			</div>
			<div id="script() const">
				<h3>const BScript* script() const;</h3><p>获取此源码对象所在的脚本对象。</p>
			</div>
		</div>
	</body>
</html>